package com.ny.contorller;

import com.ny.entity.SensorData;
import com.ny.service.MqttMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
 * 传感器数据控制器：提供HTTP接口，用于获取和设置传感器数据
 */
@RestController // 标记为REST风格控制器，返回JSON数据
public class SensorDataController {

    // 注入MQTT消息服务（自动依赖注入）
    @Autowired
    private MqttMessageService mqttMessageService;

    /**
     * 获取最新传感器数据接口
     * 请求地址：http://localhost:8081/sensor-data
     * 请求方式：GET
     * @return 传感器数据对象（包含温度、湿度、LED状态）
     */
    @GetMapping("/sensor-data")
    public SensorData getSensorData() {
        // 调用业务层方法获取数据
        SensorData data = mqttMessageService.getSensorData();
        System.out.println("获取传感器数据：" + data); // 控制台打印（仅调试用）
        return data; // 返回数据给前端
    }

    /**
     * 批量设置传感器属性接口
     * 请求地址：http://localhost:8081/set-all-properties
     * 请求方式：POST
     * 请求体示例：
     * {
     *   "temperature": 25.5,
     *   "humi": 60,
     *   "led": 1
     * }
     * @param sensorData 包含待设置属性的请求体（JSON格式）
     * @return 操作结果（成功/失败）
     */
    @PostMapping("/set-all-properties")
    public String setAllProperties(@RequestBody SensorData sensorData) {
        // 构建属性映射（key=属性名，value=属性值）
        Map<String, Object> properties = new HashMap<>();
        properties.put("temperature", sensorData.getTemperature()); // 温度
        properties.put("humi", sensorData.getHumi()); // 湿度
        properties.put("led", sensorData.getLed()); // LED状态

        // 调用业务层批量设置属性方法
        mqttMessageService.setProperties(properties);
        return "success!!"; // 返回成功标识
    }
}